/**
 * @file buttons.h
 * @brief 按钮输入处理模块头文件
 */

#ifndef BUTTONS_H
#define BUTTONS_H

#include <Arduino.h>
#include "config.h"

// 按钮状态枚举
enum ButtonState {
    BUTTON_IDLE = 0,      // 空闲状态
    BUTTON_PRESSED,       // 按下状态
    BUTTON_RELEASED,      // 释放状态
    BUTTON_LONG_PRESSED   // 长按状态
};

// 按钮类型枚举
enum ButtonType {
    BUTTON_TYPE_MODE = 0,      // 模式按钮
    BUTTON_TYPE_UP,            // 上按钮
    BUTTON_TYPE_DOWN,          // 下按钮
    BUTTON_TYPE_ENTER,         // 确认按钮
    BUTTON_TYPE_COUNT          // 按钮数量
};

/**
 * @brief 初始化按钮
 */
void initButtons();

/**
 * @brief 更新按钮状态
 */
void updateButtons();

/**
 * @brief 获取按钮状态
 * 
 * @param button 按钮类型
 * @return ButtonState 按钮状态
 */
ButtonState getButtonState(ButtonType button);

/**
 * @brief 检查按钮是否刚被按下
 * 
 * @param button 按钮类型
 * @return true 按钮刚被按下
 * @return false 按钮未被按下
 */
bool isButtonPressed(ButtonType button);

/**
 * @brief 检查按钮是否刚被释放
 * 
 * @param button 按钮类型
 * @return true 按钮刚被释放
 * @return false 按钮未被释放
 */
bool isButtonReleased(ButtonType button);

/**
 * @brief 检查按钮是否被长按
 * 
 * @param button 按钮类型
 * @return true 按钮被长按
 * @return false 按钮未被长按
 */
bool isButtonLongPressed(ButtonType button);

/**
 * @brief 重置按钮状态
 * 
 * @param button 按钮类型
 */
void resetButtonState(ButtonType button);

#endif // BUTTONS_H